package com.lang.reflect;

import com.annotation.test.Demo;
import org.junit.Test;

import java.lang.reflect.Method;
import java.lang.reflect.Parameter;
import java.util.Date;

/**
 * Created by yangliwei on 2017/7/24.
 */
public class MethodDemo {

    //一个用于测试的带参方法
    public void test(String name, Date birthday) {

    }


    @Test
    public void testGetName() {
        System.out.println(this.getClass().getMethods()[0].getName());
    }

    //用来判断返回类型是否为void
    @Test
    public void testReturnType() throws NoSuchMethodException {
        Class clazz = MethodDemo.class;
        Method method = clazz.getMethod("test",String.class,Date.class);
        System.out.println(method.getReturnType().equals(void.class));
    }

    /**
     * 测试两个getParameterTypes() 和getParameters方法区别
     * 这里的parameter.getName方法刚开始一直输出的是args1并不是参数名称，不知道为什么就好，很奇怪
     * 貌似只能是本类的中的方法才可以看到参数名称
     */
    @Test
    public void testParameter() {
        Class clazz = Demo.class;
        Method[] methods = clazz.getMethods();
        for (Method method : methods) {
            System.out.println(method.getName() + " : " + method.getParameters());
            for (Parameter parameter : method.getParameters()) {
                System.out.println(parameter.getName() + " : " + parameter.getModifiers() + " - " + parameter.getType() + " - " + parameter.getParameterizedType());
            }
            System.out.println(method.getName() + " : " + method.getParameterTypes());
            for (Class clazz1 : method.getParameterTypes()) {
                System.out.println(clazz1.getName() + " : " + clazz1.getModifiers());
            }
        }
    }
}
